package com.example.practicetest.service;
import com.example.practicetest.dao.GoodsDao;
import com.example.practicetest.entity.Goods;

import java.io.*;

/**
 * @author wushuang
 * 商品相关的业务逻辑层
 */
public class GoodsService {

    GoodsDao goodsDao = new GoodsDao();

    /**
     * 录入商品
     * 先判断商品名是否已经存在
     * 如果不存在，则录入商品
     */
    public int addGoods(Goods goods) {
        if(goodsDao.findGoods(goods.getNumber()) != null){
            // 商品已存在
            return -1;
        }
        // 0表示添加失败，1表示添加成功
        return goodsDao.addGoods(goods);
    }

    /**
     * 删除商品
     */
    public int deleteGoods(String name) {
        return goodsDao.deleteGoods(name);
    }

    /**
     * 购买商品
     * 1.先判断商品是否存在
     * 2.如果存在，判断库存是否足够
     */
    public int purchaseGoods(String number) {
        if(goodsDao.findGoods(number) != null){
            // 商品存在
            Goods goods = goodsDao.findGoods(number);
            if(goods.getStock() > 0){
                // 库存足够
                goods.setStock(goods.getStock() - 1);
                return goodsDao.updateGoods(goods);
            }else{
                // 库存不足
                return -1;
            }
        }
        return -1;
    }

    /**
     * 查询商品
     */
    public Goods findGoods(String number) {
        return goodsDao.findGoods(number);
    }

    /**
     * 通过名称查询商品
     */
    public Goods findGoodsByName(String name) {
        return goodsDao.findGoodsByName(name);
    }

    /**
     * 从csv文件里获取商品列表，存入数据库
     */
    public boolean getGoodsFromCsv() {
        File file = null;
        FileReader reader = null;
        BufferedReader br = null;
        try {
            file = new File("D:\\bluemsun\\PracticeTest\\src\\main\\java\\com\\example\\practicetest\\file\\goods.csv");
            reader = new FileReader(file);
            br = new BufferedReader(reader);
            String line = null;
            while ((line = br.readLine()) != null) {
                String[] str = line.split(",");
                // 跳过表头
                if("price".equals(str[1])){
                    continue;
                }
                Goods goods = new Goods();
                goods.setName(str[0]);
                goods.setPrice(Double.parseDouble(str[1]));
                goods.setStock(Integer.parseInt(str[2]));
                goods.setNumber(str[3]);
                addGoods(goods);
            }
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }finally {
            try {
                if(reader != null){
                    reader.close();
                }
                if(br != null){
                    br.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            }
        }
        return true;
    }


}
